package javaman.gestor;

import java.util.Collection;

import javaman.dao.PagoPublicacionDao;
import javaman.dao.PublicacionDao;
import javaman.exceptions.PagoClaseDaoException;
import javaman.exceptions.PagoPublicacionDaoException;
import javaman.exceptions.PublicacionDaoException;
import javaman.factory.PagoPublicacionDaoFactory;
import javaman.factory.PublicacionDaoFactory;
import javaman.modelo.PagoClase;
import javaman.modelo.PagoPublicacion;
import javaman.modelo.PagoPublicacionPk;
import javaman.modelo.Publicacion;
import javaman.modelo.PublicacionPk;

public class GestorPagoPublicacion {

	PagoPublicacionDao pagoPublicacionDao = PagoPublicacionDaoFactory.create();
	PublicacionDao publicacionDao = PublicacionDaoFactory.create();
	
	public String registrarPagoPublicacion(PagoPublicacion pagoPublicacion) {
		
		String resultado = validarDatosPublicacion(pagoPublicacion);
		
		try {
			if(resultado.equals("OK")) {
				Publicacion publicacion = publicacionDao.findByPrimaryKey(pagoPublicacion.getIdpublicacion());
				if(publicacion != null) {
					
					pagoPublicacion.setSaldo(pagoPublicacion.getMonto());
					pagoPublicacionDao.insert(pagoPublicacion);
					
					PublicacionPk pk = new PublicacionPk();
					pk.setIdpublicacion(publicacion.getIdpublicacion());
					publicacion.setIdestado(2);;
					publicacionDao.update(pk, publicacion);
					
				} else {
					resultado = "[Mensaje][No existe publicacion}";
				}
			}
		} catch (PagoPublicacionDaoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			resultado = "[Mensaje][Se produjo una excepcion registrando el pago de una publicacion]";
		} catch (PublicacionDaoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			resultado = "[Mensaje][Se produjo una excepcion buscando una publicacion]";
		}
		
		return resultado;
	}
	
	public String validarDatosPublicacion(PagoPublicacion pagoPublicacion) {
		
		if(pagoPublicacion.getIdpublicacion() == 0) return "[Mensaje][Ingrese una publiacion valida]";
		if(pagoPublicacion.getMonto() == 0) return "[Mensaje][Ingrese un Monto]";
		if(pagoPublicacion.getFecha() == null) return "[Mensaje][Ingrese sus Nombres]";
	
		return "OK";
	}
	
	public String descontarSaldo(int idPagoPublicacion){
		
		String resultado = "OK";

		try {
			
			PagoPublicacion pagoPublicacion = pagoPublicacionDao.findByPrimaryKey(idPagoPublicacion);
			
			if(pagoPublicacion != null) {
				PagoPublicacionPk pk = new PagoPublicacionPk();
				pk.setIdpagoPublicacion(pagoPublicacion.getIdpagoPublicacion());
				pagoPublicacion.setSaldo(pagoPublicacion.getSaldo()-0.01);
				pagoPublicacionDao.update(pk, pagoPublicacion);
			} else {
				resultado = "[Mensaje][No existe pago asociado]";
			}
				
		} catch (PagoPublicacionDaoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			resultado = "[Mensaje][Se produjo una excepcion descontando el saldo]";
		}
		return resultado;
	}
	
	
	public Collection<PagoPublicacion> buscarPagoPublicacionPorProfesor(String where) {
		
		Collection<PagoPublicacion> pagoPublicacion = null;
		
			try {
				pagoPublicacion = pagoPublicacionDao.buscarPagoPublicacionPorProfesor(where);
			} catch (PagoPublicacionDaoException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		return pagoPublicacion;
		
	}
	
	
	
}
